package com.jerem.gwt.bredgolf.client;

import java.io.Serializable;

public class Score implements Serializable {
	
	private Long id;
	private GolfPartie golfPartie;
	private Long joueurID;
	private Joueur joueur;
	private float indexJourJ;
	private Long parcoursID;
	private GolfParcours parcours;
	private int[] listeScore;
	private int[] listePut;
	
	private int[] listeCR;
	private int[] listeBrut;
	private int[] listeNet;

	public Score() {
	}
	
	public void calcule() {
		this.calculeListeCoupsRendus();
		this.calculeListeBrut();
		this.calculeListeNet();
	}

	public float getIndexJourJ() {
		return indexJourJ;
	}

	public void setIndexJourJ(float indexJourJ) {
		this.indexJourJ = indexJourJ;
	}

	public int[] getListeScore() {
		return listeScore;
	}

	public void setListeScore(int[] listeScore) {
		this.listeScore = listeScore;
	}

	public int[] getListePut() {
		return listePut;
	}

	public void setListePut(int[] listePut) {
		this.listePut = listePut;
	}

	public Long getId() {
		return id;
	}

	public Long getJoueurID() {
		return joueurID;
	}

	public void setJoueurID(Long joueurID) {
		this.joueurID = joueurID;
	}

	public Long getParcoursID() {
		return parcoursID;
	}

	public void setParcoursID(Long parcoursID) {
		this.parcoursID = parcoursID;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public GolfPartie getGolfPartie() {
		return golfPartie;
	}

	public void setGolfPartie(GolfPartie golfPartie) {
		this.golfPartie = golfPartie;
	}

	public void setJoueur(Joueur joueur) {
		this.joueur = joueur;
	}

	public Joueur getJoueur() {
		return joueur;
	}

	public void setParcours(GolfParcours parcours) {
		this.parcours = parcours;
	}

	public GolfParcours getParcours() {
		return parcours;
	}
	
	public int getNbCoupsRendus() {
		int result = 0;
		int par = 0;
		for (int i = 0; i < parcours.getTabPar().length; i++){
			par += parcours.getTabPar()[i];
		}
		result = (int) (indexJourJ * (parcours.getSlope() / 113) + (parcours.getSSS() - par));
		return result;
	}
	
	public void calculeListeCoupsRendus() {
		int[] result = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
		int nbCoupsRendus = this.getNbCoupsRendus();
		int div = nbCoupsRendus/18;
		int reste = nbCoupsRendus%18;
		for (int i = 0; i < 18; i++) {
			result[i] = div;
		}
		for (int j = 0; j < 18; j++) {
			if (parcours.getTabHcp()[j] <= reste) {
				result[j] += 1;
			}
		}
		this.setListeCR(result);
	}
	
	public void calculeListeBrut() {
		int[] result = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
		for (int i = 0; i < 18; i++) {
			if (listeScore[i] - parcours.getTabPar()[i] >= 2) {
				result[i] = 0;
			} else if (listeScore[i] - parcours.getTabPar()[i] == 1) {
				result[i] = 1;
			} else if (listeScore[i] - parcours.getTabPar()[i] == 0) {
				result[i] = 2;
			} else if (listeScore[i] - parcours.getTabPar()[i] == -1) {
				result[i] = 3;
			} else if (listeScore[i] - parcours.getTabPar()[i] == -2) {
				result[i] = 4;
			} else if (listeScore[i] - parcours.getTabPar()[i] <= -3) {
				result[i] = 5;
			}
		}
		this.setListeBrut(result);
	}
	
	public void calculeListeNet() {
		int[] result = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
		for (int i = 0; i < 18; i++) {
			if (listeScore[i] - getListeCR()[i] - parcours.getTabPar()[i] >= 2) {
				result[i] = 0;
			} else if (listeScore[i] - getListeCR()[i] - parcours.getTabPar()[i] == 1) {
				result[i] = 1;
			} else if (listeScore[i] - getListeCR()[i] - parcours.getTabPar()[i] == 0) {
				result[i] = 2;
			} else if (listeScore[i] - getListeCR()[i] - parcours.getTabPar()[i] == -1) {
				result[i] = 3;
			} else if (listeScore[i] - getListeCR()[i] - parcours.getTabPar()[i] == -2) {
				result[i] = 4;
			} else if (listeScore[i] - getListeCR()[i] - parcours.getTabPar()[i] <= -3) {
				result[i] = 5;
			}
		}
		this.setListeNet(result);
	}
	
	public int getAllerDistance() {
		int result = 0;
		for (int i = 0; i < 9; i++) {
			result += parcours.getTabDistance()[i];
		}
		return result;
	}
	public int getRetourDistance() {
		int result = 0;
		for (int i = 9; i < 18; i++) {
			result += parcours.getTabDistance()[i];
		}
		return result;
	}
	public int getTotalDistance() {
		int result = 0;
		for (int i = 0; i < 18; i++) {
			result += parcours.getTabDistance()[i];
		}
		return result;
	}
	
	public int getAllerCR() {
		int result = 0;
		for (int i = 0; i < 9; i++) {
			result += getListeCR()[i];
		}
		return result;
	}
	public int getRetourCR() {
		int result = 0;
		for (int i = 9; i < 18; i++) {
			result += getListeCR()[i];
		}
		return result;
	}
	public int getTotalCR() {
		int result = 0;
		for (int i = 0; i < 18; i++) {
			result += getListeCR()[i];
		}
		return result;
	}
	
	public int getAllerScore() {
		int result = 0;
		for (int i = 0; i < 9; i++) {
			result += getListeScore()[i];
		}
		return result;
	}
	public int getRetourScore() {
		int result = 0;
		for (int i = 9; i < 18; i++) {
			result += getListeScore()[i];
		}
		return result;
	}
	public int getTotalScore() {
		int result = 0;
		for (int i = 0; i < 18; i++) {
			result += getListeScore()[i];
		}
		return result;
	}
	
	public int getAllerNet() {
		int result = 0;
		for (int i = 0; i < 9; i++) {
			result += getListeNet()[i];
		}
		return result;
	}
	public int getRetourNet() {
		int result = 0;
		for (int i = 9; i < 18; i++) {
			result += getListeNet()[i];
		}
		return result;
	}
	public int getTotalNet() {
		int result = 0;
		for (int i = 0; i < 18; i++) {
			result += getListeNet()[i];
		}
		return result;
	}
	
	public int getAllerBrut() {
		int result = 0;
		for (int i = 0; i < 9; i++) {
			result += getListeBrut()[i];
		}
		return result;
	}
	public int getRetourBrut() {
		int result = 0;
		for (int i = 9; i < 18; i++) {
			result += getListeBrut()[i];
		}
		return result;
	}
	public int getTotalBrut() {
		int result = 0;
		for (int i = 0; i < 18; i++) {
			result += getListeBrut()[i];
		}
		return result;
	}
	
	public int getAllerPut() {
		int result = 0;
		for (int i = 0; i < 9; i++) {
			result += getListePut()[i];
		}
		return result;
	}
	public int getRetourPut() {
		int result = 0;
		for (int i = 9; i < 18; i++) {
			result += getListePut()[i];
		}
		return result;
	}
	public int getTotalPut() {
		int result = 0;
		for (int i = 0; i < 18; i++) {
			result += getListePut()[i];
		}
		return result;
	}
	
	public int getAllerPar() {
		int result = 0;
		for (int i = 0; i < 9; i++) {
			result += parcours.getTabPar()[i];
		}
		return result;
	}
	public int getRetourPar() {
		int result = 0;
		for (int i = 9; i < 18; i++) {
			result += parcours.getTabPar()[i];
		}
		return result;
	}
	public int getTotalPar() {
		int result = 0;
		for (int i = 0; i < 18; i++) {
			result += parcours.getTabPar()[i];
		}
		return result;
	}
	
	public int getNbAlbatros() {
		int result = 0;
		for (int i = 0; i < 18; i++) {
			if (listeScore[i] - parcours.getTabPar()[i] <= -3) {
				result += 1;
			}
		}
		return result;
	}
	public int getNbEagles() {
		int result = 0;
		for (int i = 0; i < 18; i++) {
			if (listeScore[i] - parcours.getTabPar()[i] == -2) {
				result += 1;
			}
		}
		return result;
	}
	public int getNbBirdies() {
		int result = 0;
		for (int i = 0; i < 18; i++) {
			if (listeScore[i] - parcours.getTabPar()[i] == -1) {
				result += 1;
			}
		}
		return result;
	}
	public int getNbPars() {
		int result = 0;
		for (int i = 0; i < 18; i++) {
			if (listeScore[i] - parcours.getTabPar()[i] == 0) {
				result += 1;
			}
		}
		return result;
	}
	public int getNbBogeys() {
		int result = 0;
		for (int i = 0; i < 18; i++) {
			if (listeScore[i] - parcours.getTabPar()[i] == 1) {
				result += 1;
			}
		}
		return result;
	}
	public int getNbDoubleBogeys() {
		int result = 0;
		for (int i = 0; i < 18; i++) {
			if (listeScore[i] - parcours.getTabPar()[i] == 2) {
				result += 1;
			}
		}
		return result;
	}
	public int getNbTripleBogeys() {
		int result = 0;
		for (int i = 0; i < 18; i++) {
			if (listeScore[i] - parcours.getTabPar()[i] == 3) {
				result += 1;
			}
		}
		return result;
	}
	public int getNbCroix() {
		int result = 0;
		for (int i = 0; i < 18; i++) {
			if (listeScore[i] - parcours.getTabPar()[i] >= 4) {
				result += 1;
			}
		}
		return result;
	}

	public void setListeCR(int[] listeCR) {
		this.listeCR = listeCR;
	}

	public int[] getListeCR() {
		return listeCR;
	}

	public void setListeBrut(int[] listeBrut) {
		this.listeBrut = listeBrut;
	}

	public int[] getListeBrut() {
		return listeBrut;
	}

	public void setListeNet(int[] listeNet) {
		this.listeNet = listeNet;
	}

	public int[] getListeNet() {
		return listeNet;
	}
	
	
}